package com.sophie.util;

import cn.hutool.core.io.FileUtil;
import com.sophie.entity.User;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * 处理文件上传的帮助类
 */
public class FileUploadUtil {
    /**
     * 用于上传图片，会修改文件名称
     * @return
     */
    public static String uploadImage(Part part, HttpServletRequest request) throws IOException {
        //1.获取上传的文件名
        String fileName = part.getSubmittedFileName();
        //2.获取文件的后缀名  .png
        String fileExt= fileName.substring(fileName.lastIndexOf("."));
        //3.通过UUID重新组装新的图片名称  uuid.png
        String newFileName = UUID.randomUUID()+fileExt;
        //4.判断目录是否存在
        File tempDir =new File(request.getServletContext().getRealPath("/temp"));
        if(!tempDir.exists()){
            tempDir.mkdirs();
        }
        //5.创建新File对象   临时目录/uuid.png(真实路径)
        File tempFile=new File(tempDir,newFileName);
        //6.将图片存入到磁盘
        part.write(tempFile.getAbsolutePath());
        //7.将文件上传到腾讯云服务器上
        QCloudUtil.upload(newFileName,tempFile.getAbsolutePath());
        //8.把临时文件删除
        FileUtil.del(tempFile);
        FileUtil.del(tempDir);
        //9.返回的是腾讯云上的地址
        String path = "https://"+QCloudUtil.bucketName+".cos."+QCloudUtil.regionName+".myqcloud.com/"+newFileName;
        return path;
    }


    /**
     * 此方法是上次附件(文件)，保留文件名
     */
    public static String uploadFile(Part part, HttpServletRequest request) throws IOException {
        //1.获取上传的文件名  10-Nginx服务器.chm
        String submitName = part.getSubmittedFileName();
        //2.获取用户id
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        Integer userid = user.getId();
        //3.拼接上传到服务器上的文件名称 5-10-Nginx服务器.chm
        String fileName = userid+"-"+submitName;
        //4.判断目录是否存在
        File tempDir =new File(request.getServletContext().getRealPath("/temp"));
        if(!tempDir.exists()){
            //创建多级目录
            tempDir.mkdirs();
        }
        //5.创建新File对象   你指定的本地磁盘目录/uuid.png(真实路径)
        File tempFile=new File(tempDir,fileName);
        //6.将图片存入到磁盘
        part.write(tempFile.getAbsolutePath());
        //7.将文件上传到腾讯云服务器上
        QCloudUtil.upload(fileName,tempFile.getAbsolutePath());
        //8.把临时文件删除
        FileUtil.del(tempFile);
        FileUtil.del(tempDir);
        //8.返回的是腾讯云上的地址
        String path = "https://"+QCloudUtil.bucketName+".cos."+QCloudUtil.regionName+".myqcloud.com/"+fileName;
        return  path;
    }
}
